/*
 * Copyright 2002-2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.context.annotation;

import org.springframework.beans.factory.Aware;
import org.springframework.core.type.AnnotationMetadata;

/**
 * Interface to be implemented by any @{@link Configuration} class that wishes
 * to be injected with the {@link AnnotationMetadata} of the @{@code Configuration}
 * class that imported it. Useful in conjunction with annotations that
 * use @{@link Import} as a meta-annotation.
 *
 * @author Chris Beams
 * @since 3.1
 */

/**
 1. 内部成员详解
 void setImportMetadata(AnnotationMetadata importMetadata) 参数: AnnotationMetadata  导入当前配置类的配置类的注解元数据
 在{@link ConfigurationClassPostProcessor#postProcessBeforeInitialization}中被调用,
 当检测到某个bean实现了 ImportAware 接口时，会调用 setImportMetadata 方法
 (AutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization)


 2. 继承树关系
	 ImportAware 是一个接口，继承关系如下：
	 父接口: org.springframework.beans.factory.Aware
	 Aware 是Spring框架中的标记接口，表示实现该接口的bean希望被Spring容器注入某些框架相关的依赖
	 直接子接口: 在Spring框架中没有直接扩展 ImportAware 的其他接口
 3. 实现类和其他类的关系
 实现类:
 	ImportAware 本身是一个接口，需要具体类来实现它。Spring框架中许多通过 @Import 导入的配置类会实现此接口。
 相关类和接口关系:
	 @Configuration: ImportAware 主要由使用 @Import 注解导入的 @Configuration 类实现
	 @Import: 与 @Import 注解配合使用，当一个配置类通过 @Import 被导入时，可以实现 ImportAware 来获取导入它的配置类的信息
	 AnnotationMetadata: 提供了关于注解配置类的元数据信息，通过 setImportMetadata 方法注入
 4. 总结
 ImportAware 是Spring框架中一个特殊的回调接口，主要用于以下目的：
	 允许被导入的配置类获取导入它的配置类的注解元数据
	 是Spring @Configuration体系中的重要组成部分
	 继承自 Aware 接口，符合Spring的依赖注入设计理念
	 提供了一种机制，使得配置类可以感知到是谁导入了它
 5. 应用场景
	 条件化配置: 被导入的配置类可以根据导入它的配置类的注解信息来决定是否启用某些配置
	 元数据处理: 获取导入类上的注解信息，用于动态生成或调整Bean定义
	 自定义导入逻辑: 结合自定义的 @Import 注解使用，实现复杂的导入逻辑
	 框架扩展: Spring Boot等框架利用此机制实现自动配置功能，根据主配置类的信息来调整自动配置行为
 */
public interface ImportAware extends Aware {

	/**
	 * Set the annotation metadata of the importing @{@code Configuration} class.
	 */
	void setImportMetadata(AnnotationMetadata importMetadata);

}
